//这一行测试提交克隆
//ceshidierci

import express from "express";
import cors from "cors";

import sql from "mssql";
import sql_config from "./sql_config.js";


let emailVerificationCodes = {};

let sql_Pool;

async function connectSql() {
  try {
    sql_Pool = await sql.connect(sql_config.dbConfig);

    console.log("SQL Server 链接成功");
  } catch (error) {
    console.error("SQL Server 链接失败:", error.message);
  }
}
export default function getSqlPool() {
  return sql_Pool;
}

connectSql();



import {
  zhanghao_insertData,
  queryDatabase,
  deleteZhangHao,
  delete_loginTimeOut,
  delete_registerTimeOut,
  delete_VerificationCodes,
  checkLastGetCodeTime,
  vCode,
  login,
  changePass
} from "./sql_function.js";

const app = express();
app.use(cors());

// 解析 JSON 请求体
app.use(express.json());


app.post("/changePass", async (req, res) => {
  const { username, password, email, inputCode } = req.body;

  try {
    const ifTrue = await vCode(email, inputCode);
    if (ifTrue) {
      console.log('se密码更改成功');
      await changePass(username, password, email);
      res.status(200).send({ message: "密码更改成功" });
    }
    else {
      console.log("验证码错误");
      throw new Error('验证码错误');
    }

  } catch (err) {
    if(err.message === '用户和邮箱不匹配'){
      console.log('用户和邮箱不匹配');
      res.status(201).send({ error: "用户和邮箱不匹配", details: err.message });
    }
    if (err.message === '验证码错误') {
      console.log('2验证码错误');
      res.status(202).send({ error: "验证码错误", details: err.message });
    }
    else{
      res.status(500).send({ error: "se密码更改失败", details: err.message });
    }
      
  }
});

// 插入账户数据接口
app.post("/insertData_zhanghao", async (req, res) => {
  const { username, password, email, inputCode } = req.body;

  try {
    // 确保 vCode 是一个异步函数，并且调用时使用 await 等待结果
    const ifTrue = await vCode(email, inputCode);  // 使用 await 确保异步操作完成

    if (ifTrue) {
      console.log("验证码正确，开始插入数据");

      // 假设 zhanghao_insertData 是异步函数
      await zhanghao_insertData(username, password, email);

      // 返回成功响应
      res.status(200).send({ message: "数据插入成功" });
    } else {
      // 验证码错误
      console.log("1验证码错误");
      res.status(202).send({ message: "验证码错误" });
    }

  } catch (err) {
    // 错误处理：用户名或邮箱已被使用
    if (err.message === '用户名或者邮箱已被使用') {
      console.log('用户名或者邮箱已被使用');
      res.status(201).send({ error: "用户名或者邮箱已被使用", details: err.message });
    } 
    // 处理其他通用错误
    else {
      console.log("数据插入失败", err);
      res.status(500).send({ error: "数据插入失败", details: err.message || err });
    }
  }
});



// 查询账户数据接口
app.get("/queryData", async (req, res) => {
  try {
    console.log(1);
    await queryDatabase();
    res.status(200).json(data);
  } catch (err) {
    res.status(500).send({ error: "查询失败", details: err.message });
  }
});

// 删除账户数据接口
app.delete("/deleteData_ZhangHao", async (req, res) => {
  try {
    await deleteZhangHao();
    res.status(200).send({ message: "账号数据删除成功" });
  } catch (err) {
    res.status(500).send({ error: "删除失败", details: err.message });
  }
});
app.delete("/deleteData_loginTimeOut", async (req, res) => {
  try {
    await delete_loginTimeOut();
    res.status(200).send({ message: "登录时间数据删除成功" });
  } catch (err) {
    res.status(500).send({ error: "删除失败", details: err.message });
  }
});
app.delete("/deleteData_registerTimeOut", async (req, res) => {
  try {
    await delete_registerTimeOut();
    res.status(200).send({ message: "注册时间数据删除成功" });
  } catch (err) {
    res.status(500).send({ error: "删除失败", details: err.message });
  }
});
app.delete("/deleteData_VerificationCodes", async (req, res) => {
  try {
    await delete_VerificationCodes();
    res.status(200).send({ message: "验证码数据删除成功" });
  } catch (err) {
    res.status(500).send({ error: "删除失败", details: err.message });
  }
});

// 发送验证码接口
app.post('/send_verificationCode', async (req, res) => {
  const { email } = req.body;
  console.log(email);
  try {
    console.log("11");
    await checkLastGetCodeTime(email);
    // 返回成功响应
    res.status(200).send({ message: '验证码已发送，请检查邮箱' });
  }
  catch (err) {
    console.log('捕获到的错误:', err);  // 打印整个错误对象
    console.log('错误的 message:', err.message);  // 输出 message，确认它是否与你期望的匹配

    // 确保 message 的匹配完全一致
    if (err.message && err.message.trim() === '验证码获取时间间隔太短，请稍后再试') {
      console.log('1');  // 确认条件是否触发
      res.status(400).send({
        err: "验证码获取时间间隔太短，请稍后再试",
        details: err.message
      });
    } else {
      console.log('验证码发送失败:', err);
      res.status(500).send({
        message: '网络错误或验证码发送失败',
        err: err.message
      });
    }
  }

});



app.get('/', (req, res) => {
  const userIp = req.ip;  // 获取用户的IP地址
  res.send(`Your IP address is ${userIp}`);
});

const server = app.listen(3000, '0.0.0.0', () => {
  console.log('Server is running on http://0.0.0.0:3000');
});

app.post('/login', async (req, res) => {
  const { username, password } = req.body;
  console.log("11");
  console.log(username + "//" + password)

  try {
    console.log("111");
    const response = await login(username, password);

    if (response) {
      console.log("1234");
      return res.status(200).json({ message: "登录成功" });
    }
    else {
      return res.status(201).json({ message: "登录成功" });
    }

  }
  catch (err) {
    res.status(400).json({ message: err.message });  // 返回错误信息
  }
});



process.on('SIGINT', async () => {
  console.log('Shutting down the server...');

  // 关闭 HTTP 服务器
  server.close(async () => {
    console.log('HTTP server closed.');

    // 关闭 SQL Server 连接池
    try {
      if (sql_Pool) {
        await sql_Pool.close();  // 关闭连接池
        console.log('SQL Server 链接关闭.');
      }
    } catch (err) {
      console.error('关闭SQL server 连接池失败，错误:', err);
    }

    // 退出进程
    process.exit(0);
  });
});



//login('123', '12345');
